home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #002 (19xx)(Amiga User Group Deutschland e.V.).zip / Franz PD Disk #002 (19xx)(Amiga User Group Deutschland e.V.).adf / HP-10C / gadgets.mod < prev    next >
Text File  |  1988-02-24  |  15KB  |  566 lines

  1. IMPLEMENTATION MODULE CalcGadgets;
  2.  
  3. (* 
  4.    Create gadgets for calculator.
  5.  
  6.  
  7.    Created: Duncan Prindle,  September 1, 1986
  8.  
  9.    Modified: Perhaps
  10.  
  11. *)
  12.  
  13. FROM CalcFunctions IMPORT X, ErrorType, INDEG, BLANK,
  14.                           Add, Subtract, Multiply, Divide,
  15.                           POINT, PI, CLX, RDN, ENTER, LASTX, SIN,
  16.                           ASIN, COS, ACOS, TAN, ATAN, LN, EXP, TENtotheX,
  17.                           LOG, YtotheX, OneOverX, XSquared, SQRT,
  18.                           XtoY, CHS, CLRST, StackUp, stored;
  19.  
  20. FROM Gadgets      IMPORT BoolGadget, AddGadget, RefreshGadgets,
  21.                          RemoveGadget;
  22. FROM Intuition    IMPORT
  23.                          IDCMPFlags, IDCMPFlagSet,
  24.                          GadgetPtr, Gadget, GadgetFlags, GadgetFlagSet,
  25.                          ActivationFlags, ActivationFlagSet,
  26.                          BorderPtr, Border, DrawBorder, Requester,
  27.                          IntuitionTextPtr, IntuitionText, PrintIText,
  28.                          IntuiMessagePtr, IntuiMessage,
  29.                          NewWindow, WindowFlags, WindowFlagSet, WindowPtr,
  30.                          ScreenFlags, ScreenFlagSet;
  31. FROM Ports        IMPORT GetMsg;
  32. FROM Storage      IMPORT ALLOCATE;
  33. FROM SYSTEM       IMPORT ADR, ADDRESS, BYTE, NULL;
  34. FROM Tasks        IMPORT SignalSet, Wait;
  35. FROM Windows      IMPORT OpenWindow;
  36.  
  37. TYPE XYPtr = POINTER TO Points;
  38.      Points = RECORD
  39.         XP : ARRAY[0..9] OF INTEGER;
  40.      END;
  41.      NAME  = ARRAY[0..2] OF CHAR;
  42.  
  43.  
  44. VAR
  45.   P         : ARRAY[0..3] OF XYPtr;
  46.   Name      : ARRAY[0..46] OF NAME;
  47.   Name2     : ARRAY[0..7] OF NAME;
  48.   LText     : ARRAY[0..46] OF CARDINAL;
  49.   LText2    : ARRAY[0..7] OF CARDINAL;
  50.   keys      : ARRAY[0..46] OF CalcButtonPtr;
  51.   KEY       : CalcButtonPtr;
  52.   t         : ARRAY[0..46] OF IntuitionTextPtr;
  53.   ts        : ARRAY[0..7] OF IntuitionTextPtr;
  54.   temp      : IntuitionText;
  55.   LGadge    : ARRAY[0..46] OF CARDINAL;
  56.   TGadge    : ARRAY[0..46] OF CARDINAL;
  57.   TOGGLE    : CARDINAL;
  58.   w         : NewWindow;
  59.   WinPtr    : WindowPtr;
  60.   gPtr      : ARRAY[0..46] OF GadgetPtr;
  61.   Signal    : IntuiMessagePtr;
  62.   Sig1      : SignalSet;
  63.   Button    : GadgetPtr;
  64.   CGadget   : CARDINAL;
  65.   req       : Requester;
  66.   CalcName  : ARRAY[0..7] OF CHAR;
  67.  
  68. PROCEDURE InitBorder( VAR b : ARRAY OF BorderPtr );
  69.  
  70. VAR I    : INTEGER;
  71.  
  72. BEGIN
  73.  
  74. (* Initialize arrays of points for four types of gadgets *)
  75. FOR I := 0 TO 3 DO
  76.   NEW( P[I] );
  77.     WITH P[I]^ DO
  78.       XP[0] :=   0;   XP[1] :=   0;
  79.       XP[2] :=   0;
  80.                       XP[7] :=   0;
  81.       XP[8] :=   0;   XP[9] :=   0;
  82.     END;
  83. END;
  84.  
  85. P[0]^.XP[3] := 15; P[0]^.XP[4] := 25; P[0]^.XP[5] := 15; P[0]^.XP[6] := 25;
  86. P[1]^.XP[3] := 15; P[1]^.XP[4] := 30; P[1]^.XP[5] := 15; P[1]^.XP[6] := 30;
  87. P[2]^.XP[3] := 32; P[2]^.XP[4] := 30; P[2]^.XP[5] := 32; P[2]^.XP[6] := 30;
  88. P[3]^.XP[3] := 15; P[3]^.XP[4] :=155; P[3]^.XP[5] := 15; P[3]^.XP[6] :=155;
  89. (* Points for borders are initialised *)
  90.  
  91. (* Fill in Border structures *)
  92. FOR I := 0 TO 3 DO
  93.   NEW( b[I] );
  94.     WITH b[I]^ DO
  95.       LeftEdge   := 0;
  96.       TopEdge    := 0;
  97.       FrontPen   := BYTE (1);
  98.       DrawMode   := BYTE (0);
  99.       Count      := BYTE (5);
  100.       XY         := P[I];
  101.       NextBorder := NULL;
  102.     END;
  103. END;
  104. b[3]^.TopEdge  :=  -4;
  105. (* Border Structures all filled in. *)
  106.  
  107. END InitBorder;
  108.  
  109.  
  110.  
  111. PROCEDURE InitGadgets( VAR g : ARRAY OF GadgetPtr;
  112.                        VAR b : ARRAY OF BorderPtr );
  113.  
  114. VAR  I        : CARDINAL;
  115.      J        : CARDINAL;
  116.      TopGadge : INTEGER;
  117.  
  118. BEGIN
  119.  
  120.  
  121. (* Fill in array containing names of Buttons *)
  122.   Name[ 0]  := " - ";
  123.   Name[ 1]  := " 7 ";
  124.   Name[ 2]  := " 8 ";
  125.   Name[ 3]  := " 9 ";
  126.   Name[ 4]  := " + ";
  127.   Name[ 5]  := " 4 ";
  128.   Name[ 6]  := " 5 ";
  129.   Name[ 7]  := " 6 ";
  130.   Name[ 8]  := " * ";
  131.   Name[ 9]  := " 1 ";
  132.   Name[10]  := " 2 ";
  133.   Name[11]  := " 3 ";
  134.   Name[12]  := " / ";
  135.   Name[13]  := " 0 ";
  136.   Name[14]  := " . ";
  137.   Name[15]  := " pi";
  138.  
  139.   Name[16]  := "CLX";
  140.   Name[17]  := "RDN";
  141.   Name[18]  := " ^ ";   Name2[0] := "|  ";
  142.  
  143.   Name[19]  := "EEX";
  144.   Name[20]  := "RAD";
  145.   Name[21]  := "GLD";
  146.   Name[22]  := "sin";
  147.   Name[23]  := "cos";
  148.   Name[24]  := "tan";
  149.   Name[25]  := "ln ";
  150.   Name[26]  := "e  ";   Name2[1] := "x  ";
  151.   Name[27]  := "X  ";   Name2[2] := "2  ";
  152.   Name[28]  := "CHS";
  153.   Name[29]  := "CLS";
  154.   Name[30]  := "y  ";   Name2[3] := "x  ";
  155.   Name[31]  := "X-Y";
  156.   Name[32]  := "STO";
  157.   Name[33]  := "RCL";
  158.  
  159.   Name[34]  := "sin";   Name2[4] := " -1";
  160.   Name[35]  := "cos";   Name2[5] := " -1";
  161.   Name[36]  := "tan";   Name2[6] := " -1";
  162.   Name[37]  := "log";
  163.   Name[38]  := "10 ";   Name2[7] := "  x";
  164.   Name[39]  := "sqr";
  165.   Name[40]  := "CHS";
  166.   Name[41]  := "CLS";
  167.   Name[42]  := "1/X";
  168.   Name[43]  := "lsX";
  169.   Name[44]  := "STO";
  170.   Name[45]  := "RCL";
  171.  
  172.   Name[46]  := "DEG";
  173.  
  174. (* Fill in the left positions of the start of the names *)
  175.   FOR I := 0 TO 15 DO
  176.      LText[I]  := 1;
  177.   END;
  178.   FOR I := 16 TO 46 DO
  179.      LText[I]  := 4;
  180.   END;
  181.   FOR I := 34 TO 36 DO
  182.      LText[I]  := 1;
  183.   END;
  184.   LText[26]  := 3;
  185.   LText[27]  := 3;
  186.   LText[30]  := 3;
  187.  
  188.   LText2[0]  :=12;
  189.   LText2[1]  :=12;
  190.   LText2[2]  :=12;
  191.   LText2[3]  :=12;
  192.   LText2[4]  := 8;
  193.   LText2[5]  := 8;
  194.   LText2[6]  := 8;
  195.   LText2[7]  := 4;
  196.  
  197. (* Create Intuitext and Gadget records for the gadgets *)
  198. FOR I := 0 TO 46 DO
  199.   NEW( t[I] );
  200.     WITH t[I]^ DO
  201.       FrontPen  := BYTE (2);   BackPen   := BYTE (0);
  202.       DrawMode  := BYTE (0);   IText     := ADR( Name[I] );
  203.       ITextFont := NULL;       NextText  := NULL;
  204.       LeftEdge  := LText[I];   TopEdge   := 4;
  205.     END;
  206. END;
  207.  
  208. (* Now for the superscripts *)
  209. FOR I := 0 TO 7 DO
  210.   NEW( ts[I] );
  211.     WITH ts[I]^ DO
  212.       FrontPen  := BYTE (2);   BackPen   := BYTE (0);
  213.       DrawMode  := BYTE (0);   IText     := ADR( Name2[I] );
  214.       ITextFont := NULL;       NextText  := NULL;
  215.       LeftEdge  := LText2[I];  TopEdge   := 4;
  216.     END;
  217. END;
  218.  
  219. (* Link up text for superscripts *)
  220. t[18]^.NextText  := ts[0];
  221. t[26]^.NextText  := ts[1];
  222. t[27]^.NextText  := ts[2];
  223. t[30]^.NextText  := ts[3];
  224. t[34]^.NextText  := ts[4];
  225. t[35]^.NextText  := ts[5];
  226. t[36]^.NextText  := ts[6];
  227. t[38]^.NextText  := ts[7];
  228.  
  229. (* superscripts have different top edges *)
  230. t[18]^.TopEdge :=10;
  231.  
  232. ts[0]^.TopEdge :=15;
  233. ts[1]^.TopEdge := 0;
  234. ts[2]^.TopEdge := 1;
  235. ts[3]^.TopEdge := 0;
  236. ts[4]^.TopEdge := 1;
  237. ts[5]^.TopEdge := 1;
  238. ts[6]^.TopEdge := 1;
  239. ts[7]^.TopEdge := 1;
  240.  
  241.  
  242. (* Text is finished *)
  243.  
  244.  
  245. (* Assign functions to the keys *)
  246.   FOR I := 0 TO 46 DO
  247.     NEW( keys[I] );
  248.   END;
  249.   keys[ 0]^.CalcKey := Subtract;
  250.   keys[ 1]^.CalcKey := BLANK;
  251.   keys[ 2]^.CalcKey := BLANK;
  252.   keys[ 3]^.CalcKey := BLANK;
  253.   keys[ 4]^.CalcKey := Add;
  254.   keys[ 5]^.CalcKey := BLANK;
  255.   keys[ 6]^.CalcKey := BLANK;
  256.   keys[ 7]^.CalcKey := BLANK;
  257.   keys[ 8]^.CalcKey := Multiply;
  258.   keys[ 9]^.CalcKey := BLANK;
  259.   keys[10]^.CalcKey := BLANK;
  260.   keys[11]^.CalcKey := BLANK;
  261.   keys[12]^.CalcKey := Divide;
  262.   keys[13]^.CalcKey := BLANK;
  263.   keys[14]^.CalcKey := POINT;
  264.   keys[15]^.CalcKey := PI;
  265.  
  266.   keys[16]^.CalcKey := CLX;
  267.   keys[17]^.CalcKey := RDN;
  268.   keys[18]^.CalcKey := ENTER;
  269.  
  270.   keys[19]^.CalcKey := BLANK;
  271.   keys[20]^.CalcKey := DEG;
  272.   keys[21]^.CalcKey := GOLD;
  273.   keys[22]^.CalcKey := SIN;
  274.   keys[23]^.CalcKey := COS;
  275.   keys[24]^.CalcKey := TAN;
  276.   keys[25]^.CalcKey := LN;
  277.   keys[26]^.CalcKey := EXP;
  278.   keys[27]^.CalcKey := XSquared;
  279.   keys[28]^.CalcKey := CHS;
  280.   keys[29]^.CalcKey := CLRST;
  281.   keys[30]^.CalcKey := YtotheX;
  282.   keys[31]^.CalcKey := XtoY;
  283.   keys[32]^.CalcKey := STO;
  284.   keys[33]^.CalcKey := RCL;
  285.  
  286.   keys[34]^.CalcKey := ASIN;
  287.   keys[35]^.CalcKey := ACOS;
  288.   keys[36]^.CalcKey := ATAN;
  289.   keys[37]^.CalcKey := LOG;
  290.   keys[38]^.CalcKey := TENtotheX;
  291.   keys[39]^.CalcKey := SQRT;
  292.  
  293.   keys[40]^.CalcKey := CHS;
  294.   keys[41]^.CalcKey := CLRST;
  295.   keys[42]^.CalcKey := OneOverX;
  296.   keys[43]^.CalcKey := LASTX;
  297.   keys[44]^.CalcKey := STO;
  298.   keys[45]^.CalcKey := RCL;
  299.  
  300.   keys[46]^.CalcKey := DEG;
  301.  
  302. (* Now fill in left and top edges of Gadgets *)
  303. FOR I := 0 TO 3 DO
  304.    TopGadge := 32 + 17*I;
  305.    FOR J := 0 TO 3 DO
  306.       LGadge[4*I+J] := 10 + 30*J;
  307.       TGadge[4*I+J] := TopGadge;
  308.    END;
  309. END;
  310.  
  311. LGadge[16] :=135; TGadge[16] := 32;
  312. LGadge[17] :=135; TGadge[17] := 49;
  313. LGadge[18] :=135; TGadge[18] := 66;
  314.  
  315. FOR I := 0 TO 4 DO
  316.    TopGadge := 15 + 17*I;
  317.    FOR J := 0 TO 2 DO
  318.       LGadge[19+3*I+J] := 180 + 37*J;
  319.       TGadge[19+3*I+J] := TopGadge;
  320.    END;
  321. END;
  322.  
  323. FOR I := 0 TO 3 DO
  324.    TopGadge := 32 + 17*I;
  325.    FOR J := 0 TO 2 DO
  326.       LGadge[34+3*I+J] := 180 + 37*J;
  327.       TGadge[34+3*I+J] := TopGadge;
  328.    END;
  329. END;
  330.  
  331. LGadge[46] := 217;
  332. TGadge[46] :=  15;
  333.  
  334.  (* Create Gadget records *)
  335. FOR I := 0 TO 46 DO
  336.   NEW( g[I] );
  337.     WITH g[I]^ DO
  338.       Flags    :=  GadgetFlagSet{};
  339.       Activation:= ActivationFlagSet{RelVerify};
  340.       GadgetType:= BoolGadget;
  341.       SelectRender:= NULL;
  342.       GadgetText  := t[I];
  343.       GadgetID    := 50;
  344.       UserData    := keys[I];
  345.       LeftEdge    := LGadge[I];
  346.       TopEdge     := TGadge[I];
  347.       IF I < 16
  348.         THEN  Width     := 25;     Height   := 15;
  349.               GadgetRender:= b[0];
  350.         ELSE  Width     := 30;     Height   := 15;
  351.               GadgetRender:= b[1];
  352.       END;
  353.     END;
  354. END;
  355.  
  356.  
  357. (* We want to be able to recognize the digit gadgets quickly *)
  358. g[ 1]^.GadgetID := 7;
  359. g[ 2]^.GadgetID := 8;
  360. g[ 3]^.GadgetID := 9;
  361. g[ 5]^.GadgetID := 4;
  362. g[ 6]^.GadgetID := 5;
  363. g[ 7]^.GadgetID := 6;
  364. g[ 9]^.GadgetID := 1;
  365. g[10]^.GadgetID := 2;
  366. g[11]^.GadgetID := 3;
  367. g[13]^.GadgetID := 0;
  368.  
  369. (* Gadgets with GadgetID <= 20 will not have SAME = FALSE automatically *)
  370. g[14]^.GadgetID := 15;
  371. g[18]^.GadgetID := 15;
  372. g[28]^.GadgetID := 15;
  373.  
  374. (* Make the enter key the right size *)
  375. g[18]^.Height   := 34;
  376. g[18]^.GadgetRender := b[2];
  377.  
  378. (* I don't know how to do the display right, so disable FIX *)
  379. g[19]^.Flags    :=  GadgetFlagSet{Disabled};
  380.  
  381. (* Lastly we link the gadgets up so they all get displayed *)
  382. FOR I := 0 TO 32 DO
  383.   g[I]^.NextGadget := g[I+1];
  384. END;
  385. g[33]^.NextGadget := NULL;
  386.  
  387.  
  388. (* Keep a copy of the pointers for the DEG and GOLD Functions *)
  389. FOR I := 0 TO HIGH(g) DO
  390.   gPtr[I] := g[I];
  391. END;
  392.  
  393.  
  394. END InitGadgets;
  395.  
  396.  PROCEDURE DEG (): ErrorType;
  397.  
  398.  VAR NGadge : CARDINAL;
  399.  
  400.   BEGIN
  401.    IF INDEG
  402.       THEN INDEG := FALSE;
  403.           (* replace the DEG gadget with the RAD gadget *)
  404.            NGadge := RemoveGadget( WinPtr, gPtr[46]^);
  405.          (* Remove DEG text *)
  406.            WITH temp DO
  407.               FrontPen  := BYTE (0);   BackPen   := BYTE (0);
  408.               DrawMode  := BYTE (0);   ITextFont := NULL;
  409.               LeftEdge  := t[46]^.LeftEdge;  TopEdge   := t[46]^.TopEdge;
  410.               IText     := t[46]^.IText;     NextText  := t[46]^.NextText;
  411.           END;
  412.           PrintIText( WinPtr^.RPort^, temp, LGadge[46], TGadge[46] );
  413.  
  414.            NGadge := AddGadget( WinPtr, gPtr[20]^, 20);
  415.       ELSE INDEG := TRUE;
  416.           (* replace the RAD gadget with the DEG gadget *)
  417.            NGadge := RemoveGadget( WinPtr, gPtr[20]^);
  418.          (* Remove RAD text *)
  419.            WITH temp DO
  420.               FrontPen  := BYTE (0);   BackPen   := BYTE (0);
  421.               DrawMode  := BYTE (0);   ITextFont := NULL;
  422.               LeftEdge  := t[20]^.LeftEdge;  TopEdge   := t[20]^.TopEdge;
  423.               IText     := t[20]^.IText;     NextText  := t[20]^.NextText;
  424.           END;
  425.           PrintIText( WinPtr^.RPort^, temp, LGadge[46], TGadge[46] );
  426.            NGadge := AddGadget( WinPtr, gPtr[46]^, 20);
  427.    END;
  428.  
  429.   (* Refresh all Gadgets to be sure *)
  430.    RefreshGadgets( gPtr[0]^, WinPtr, req);
  431.  
  432.    RETURN NoError;
  433.  END DEG;
  434.  
  435.  PROCEDURE STO (): ErrorType;
  436.   BEGIN
  437.    LOOP
  438.       Sig1 := Wait (Sig1);
  439.       Signal := GetMsg( WinPtr^.UserPort );
  440.       Button  := Signal^.IAddress;
  441.       CGadget := Button^.GadgetID;
  442.       IF (CGadget = 0) OR (CGadget = 1) OR (CGadget = 2) OR
  443.          (CGadget = 3) OR (CGadget = 4) OR (CGadget = 5) OR
  444.          (CGadget = 6) OR (CGadget = 7) OR (CGadget = 8) OR
  445.          (CGadget = 9)
  446.         THEN stored[CGadget] := X;
  447.              EXIT;
  448.       END;
  449.    END;
  450.    RETURN NoError;
  451.  END STO;
  452.  
  453.  PROCEDURE RCL (): ErrorType;
  454.   BEGIN
  455.    LOOP
  456.       Sig1 := Wait (Sig1);
  457.       Signal := GetMsg( WinPtr^.UserPort );
  458.       Button  := Signal^.IAddress;
  459.       CGadget := Button^.GadgetID;
  460.       IF (CGadget = 0) OR (CGadget = 1) OR (CGadget = 2) OR
  461.          (CGadget = 3) OR (CGadget = 4) OR (CGadget = 5) OR
  462.          (CGadget = 6) OR (CGadget = 7) OR (CGadget = 8) OR
  463.          (CGadget = 9)
  464.          THEN StackUp;
  465.               X := stored[CGadget];
  466.               EXIT;
  467.       END;
  468.    END;
  469.    RETURN NoError;
  470.  END RCL;
  471.  
  472.  PROCEDURE GOLD (): ErrorType;
  473.  
  474.   VAR NGadge    : CARDINAL;
  475.       IDontCare : INTEGER;
  476.       I         : CARDINAL;
  477.  
  478.   BEGIN
  479.  
  480.  (*  Remove Gadgets 22 through 33 *)
  481.    FOR NGadge := 22 TO 33 DO
  482.       IDontCare := RemoveGadget( WinPtr, gPtr[NGadge+TOGGLE]^);
  483.    END;
  484.  
  485.  (* Remove the gadget text *)
  486.    WITH temp DO
  487.       FrontPen  := BYTE (0);   BackPen   := BYTE (0);
  488.       DrawMode  := BYTE (0);   ITextFont := NULL; 
  489.       NextText  := NULL;
  490.    END;
  491.    FOR I := 22+TOGGLE TO 33+TOGGLE DO
  492.        WITH temp DO
  493.          LeftEdge  := t[I]^.LeftEdge;  TopEdge   := t[I]^.TopEdge;
  494.          IText     := t[I]^.IText;
  495.       END;
  496.       PrintIText( WinPtr^.RPort^, temp, LGadge[I], TGadge[I] );
  497.    END;
  498.    FOR I := 0 TO 7 DO
  499.        WITH temp DO
  500.          LeftEdge  := ts[I]^.LeftEdge;  TopEdge   := ts[I]^.TopEdge;
  501.          IText     := ts[I]^.IText;
  502.       END;
  503.      IF I=0 THEN PrintIText( WinPtr^.RPort^, temp, LGadge[18], TGadge[18] );
  504.       ELSIF I=1 THEN PrintIText( WinPtr^.RPort^, temp, LGadge[26], TGadge[26] );
  505.       ELSIF I=2 THEN PrintIText( WinPtr^.RPort^, temp, LGadge[27], TGadge[27] );
  506.       ELSIF I=3 THEN PrintIText( WinPtr^.RPort^, temp, LGadge[30], TGadge[30] );
  507.       ELSIF I=4 THEN PrintIText( WinPtr^.RPort^, temp, LGadge[34], TGadge[34] );
  508.       ELSIF I=5 THEN PrintIText( WinPtr^.RPort^, temp, LGadge[35], TGadge[35] );
  509.       ELSIF I=6 THEN PrintIText( WinPtr^.RPort^, temp, LGadge[36], TGadge[36] );
  510.       ELSIF I=7 THEN PrintIText( WinPtr^.RPort^, temp, LGadge[38], TGadge[38] );
  511.     END;
  512.    END;
  513.  
  514.    IF TOGGLE = 0
  515.       THEN TOGGLE := 12;
  516.       ELSE TOGGLE :=  0;
  517.    END;
  518.  
  519.  
  520.  (* Now put in the new Gadgest *)
  521.    FOR NGadge := 22 TO 33 DO
  522.       IDontCare := AddGadget( WinPtr, gPtr[NGadge+TOGGLE]^, NGadge);
  523.    END;
  524.  
  525.  (* Now refresh all gadgets just to be sure *)
  526.    RefreshGadgets( gPtr[0]^, WinPtr, req);
  527.  
  528.    RETURN NoError;
  529.  END GOLD;
  530.  
  531.  PROCEDURE InitWindow ( VAR wp : WindowPtr; g : GadgetPtr);
  532.  
  533.    BEGIN
  534.      CalcName := "HP-10C";
  535.      WITH w DO
  536.        LeftEdge := 345; TopEdge := 1; Width := 295; Height := 103;
  537.        DetailPen := BYTE (0);
  538.        BlockPen := BYTE (1);
  539.        Title := ADR (CalcName);
  540.        Flags := WindowFlagSet {Activate, WindowClose, WindowDrag,
  541.                 WindowDepth, Refresh1};
  542.        IDCMPFlags := IDCMPFlagSet{CloseWindowFlag,MenuPick,GadgetUp};
  543.        CheckMark := NULL;
  544.        FirstGadget := g;
  545.        Type   := ScreenFlagSet{WBenchScreen};
  546.        Screen := NULL;
  547.        BitMap := NULL;
  548.      END;
  549.  
  550.   wp := OpenWindow( w );
  551.  
  552.   (* Initialize the signal Mask *)
  553.   Sig1 := SignalSet {};
  554.   (* Convert signal number to a mask *)
  555.   INCL (Sig1, CARDINAL (wp^.UserPort^.mpSigBit));
  556.  
  557.   (* Make local copy of wp *)
  558.   WinPtr := wp;
  559.  
  560.  
  561. END InitWindow;
  562.  
  563.  
  564.  
  565. END CalcGadgets.
  566.